# C# code style

## Naming

### Методы или функции (статичные методы)
`PascalCase`, в названии должен быть глагол

Пример:
```cs
public class Foo
{
    private int _field;

    public Foo(int field)
    {
        _field = _field;
    }

    public void PrintField()
    {
        Console.WriteLine(field);
    }

    public void DoIncrement()
    {
        _field++;
    }

    public static void PrintFooBar()
    {
        Console.WriteLine("foo bar");
    }
    
    // Не совсем правильно, так как функции должны выполнять какое-то действие
    public static void IncrementedField()
    {
        return _field;
    }

    // Топ
    public int IncrementedField => _field + 1;
}
```

### private, protected, internal поля
`_camelCase`

Пример:
```cs
public class Foo
{
    private int _fooBar;
}
```

### public поля, аргументы и переменные в методах
`camelCase`

Пример:
```cs
public class Foo
{
    public int fooBar;

    public void Print(string message, int repeatCount)
    {
        for (int i = 0; i < repeatCount; i++)
        {
            Console.WriteLine(message);
        }
    }
}
```

### Свойства, авто свойства
`PascalCase`
```cs
public class Foo
{
    public string FooBar { get; private set; } = "initial value";
    public int BazBar
    {
        get => _bazBar + 1;
        set => _bazBar = value - 1;
    }
    private int _bazBar;
}
```

### Поля, свойства и переменные в методах типа bool
[В этой статье](https://www.serendipidata.com/posts/naming-guidelines-for-boolean-variables) подробно описано, как их называть


## Прочее
### Кодировка
utf-8

### Индентация
4 пробела

### Длина не должна превышать 80 символов
Пример:
```cs
public class BadExample
{
    public string CoffeeBrand { get; private set; }

    public BadExample(string coffeeBrand)
    {
        CoffeeBrand = coffeeBrand;
    }

    public void DrinkCoffee()
    {
        Console.WriteLine(String.Format("I'm drinking {0} coffee right now.", CoffeeBrand));
    }
}

public class GoodExample
{
    public string CoffeeBrand { get; private set; }

    public GoodExample(string coffeeBrand)
    {
        CoffeeBrand = coffeeBrand;
    }

    public void DrinkCoffee()
    {
        Console.WriteLine($"I'm drinking {CoffeeBrand} coffee right now.");
    }
}
```
